package com.sxj.corejava.code08_常用类.内部类;


import com.sxj.corejava.code08_常用类.内部类.OuterThree.InnerThree;

/**
 * @author 石小俊
 * @date 2024年04月23日 20:08
 */
public class Test03_静态内部类 {

    public static void main(String[] args) {
        // 在非外部类中创建内部类对象
        // 方式一语法:外部类.内部类 变量名 = new 外部类.内部类()
//        OuterThree.InnerThree inner = new OuterThree.InnerThree();
        // 方式二:先导包,后创建
        // 1.将内部类所在的包手动导入
        // import 包名.外部类名.内部类名
        // 2.将内部类当做普通类创建
        // 内部类 变量名 = new 内部类()
        InnerThree inner = new InnerThree();
        inner.print();
        System.out.println("*****************************");
        OuterThree outer = new OuterThree();
        outer.show();
    }

}

class OuterThree {
    private static String name = "admin";
    private int age = 20;
    private static String phone = "13812345678";

    public static String getName() {
        return name;
    }

    public static void setName(String name) {
        OuterThree.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void show() {
        // 在外部类中创建内部类对象时直接创建
        InnerThree inner = new InnerThree();
        // 在外部类方法中访问内部类成员,需要先创建内部类对象之后再进行访问
        System.out.println(inner.name);
        System.out.println(inner.gender);

    }

    static class InnerThree {
        private String name = "alice";
        private String gender = "男";

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getGender() {
            return gender;
        }

        public void setGender(String gender) {
            this.gender = gender;
        }

        public void print() {
            // 对于同名属性,默认访问内部类的
            System.out.println(name);
            // 不能访问实例属性
//            System.out.println(age); // 报错
            // 只能访问静态属性
            System.out.println(phone);
            // 通过外部类对象可以访问外部的所有成员
            OuterThree outer = new OuterThree();
            System.out.println(outer.name);
            System.out.println(outer.age);
        }
    }
}
